home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 031a / wb613_01.zip / WN_GSSN.C < prev    next >
C/C++ Source or Header  |  1991-10-01  |  7KB  |  161 lines

  1. /*
  2. ** The Window BOSS's Data Clerk
  3. ** Copyright (c) 1988 - Philip A. Mongelluzzo
  4. ** All rights reserved.
  5. **
  6. ** wn_gssn- get social security number
  7. **
  8. ** Copyright (c) 1991 - Philip A. Mongelluzzo
  9. ** All rights reserved.
  10. **
  11. */
  12.  
  13. #include "winboss.h"                    /* standard stuff */
  14.  
  15. /*
  16. *************
  17. * wn_gphone *
  18. *************
  19. */
  20.  
  21. /*
  22. ** wn_ssn(fun,frm,fld,wn,row,col,prmpt,atrib,fill,n1,n2,n3,ubuff,hlpmsg,errmsg)
  23. **
  24. **    int        fun - fucntion code (SET || XEQ)
  25. **    (WIFORM)   frm - form pointer  (actual || NFRM)
  26. **    int        fld - field # in form (actual || NFLD)
  27. **    (WINDOWPTR) wn - window pointer
  28. **    int        row - row in window where data input begins
  29. **    int        col - col in window where data input begins
  30. **    (char *) prmpt - field promt (call with NSTR for none)
  31. **    unsigned atrib - field (not prompt) atributes 
  32. **    char      fill - field fill character
  33. **    (int *)     n1 - pointer to int for 1st part of ssn     
  34. **    (int *)     n2 - pointer to int for 2nd part of ssn
  35. **    (int *)     n3 - pointer to int for 3rd part of ssn  
  36. **    (char *) ubuff - pointer to char array of 13 bytes for editing 
  37. **    (char *)hlpmsg - pointer to help message (call with NSTR for none)
  38. **    (char *)errmsg - pointer to err message (call with NSTR) for none)
  39. **
  40. ** RETURNS:
  41. **
  42. **    social security number as 3 intergers and character string
  43. **      n1, n2, n3 - contain "integer" components of ssn
  44. **      ubuff      - contains character string of form xxx-xx-xxx
  45. **                   ubuff's contents makes a great index.
  46. **
  47. **    NULL if error, else the non zero value returned from wn_input.
  48. **
  49. ** NOTES:
  50. **
  51. **  FUN -   fun can only be SET for form setup, or XEQ for immediate
  52. **          execution.  When called with SET, valid arguements for both
  53. **          "frm" and "fld" must be specfied.  frm is the field pointer
  54. **          returned from frmopn(), and fld is the field sequence number
  55. **          in the form for this field.  When called with XEQ frm must
  56. **          be NFRM and fld must NFLD.
  57. **
  58. **  UBUFF - Editing buffer.  Must be of sufficent size to hold the
  59. **          data as it is entered.  Typical value is the length
  60. **          of the mask + 2 bytes (strlen(mask)+2).
  61. **
  62. **          On entry, the first byte of ubuff should be 
  63. **          a null, otherwise wn_input assumes there is valid
  64. **          data there and will enter edit mode.  This can be 
  65. **          handy if there is a need for prefilled but editable
  66. **          fields.  In actual pratice, wn_input uses this
  67. **          buffer for both initial character data entry and
  68. **          subsequent editing.
  69. **
  70. **          On return, ubuff contains the actual data entered in
  71. **          character format with fill and mask characters as
  72. **          spaces (e.g. 046 40 4291).
  73. **
  74. **  No validation is performed.
  75. **
  76. **  Leaving the field blank returns 0 for n1, n2, and n3.
  77. **
  78. **  Calls wn_input to perform data entry.
  79. **
  80. */
  81.  
  82. /*
  83. ***********
  84. * wn_gssn *
  85. ***********
  86. */
  87.  
  88. wn_gssn(fun,frm,fld,wn,row,col,prmpt,atrib,fill,n1,n2,n3,ubuff,hlpmsg,errmsg)
  89. int fun;                                /* SET or XEQ */
  90. WIFORM frm;                             /* form pointer or NFRM */
  91. int fld;                                /* field number or NFLD */
  92. WINDOWPTR wn;                           /* window to use */
  93. int row, col;                           /* position of input field */
  94. char *prmpt;                            /* prompt string */
  95. unsigned atrib;                         /* data entry atribute */
  96. char fill;                              /* fill char */
  97. int *n1, *n2, *n3;                      /* ssn # - components */
  98. char *ubuff;                            /* returns "value" */
  99. char *hlpmsg, *errmsg;                  /* help & error messages */
  100. {
  101. int s1,s2,s3;                           /* temp values */
  102. char mask[14];                          /* space for all */
  103. char mbuf[14];                          /* scratch buffer */
  104. char *p;                                /* scratch pointer */
  105. unsigned r;                             /* sscanf return value */
  106. int rv;                                 /* return value */
  107.  
  108.   if(fun != SET && fun != XEQ)          /* saftey check */
  109.     return(NULL);
  110.  
  111.   if(fun == SET) {                      /* set up */
  112.     if(frm[fld]->pself != (char *)frm[fld])
  113.       wns_ierr("wn_gssn");              /* die if memory is mangled */
  114.     frm[fld]->wn = wn;                  /* set window */
  115.     frm[fld]->row = row;                /* set row */
  116.     frm[fld]->col = col;                /* set col */
  117.     frm[fld]->prmpt = prmpt;            /* set prompt */
  118.     frm[fld]->atrib = atrib;            /* set attribute */
  119.     frm[fld]->fill = fill;              /* set fill character */
  120.     frm[fld]->fcode = GSSN;             /* function code */
  121.     frm[fld]->v1.vip = n1;              /* &n1 */
  122.     frm[fld]->v2.vip = n2;              /* &n2 */
  123.     frm[fld]->v3.vip = n3;              /* &n3 */
  124.     frm[fld]->v4.vcp = ubuff;           /* &ubuff */
  125.     frm[fld]->v5.vcp = hlpmsg;          /* &hlpmsg */
  126.     frm[fld]->v6.vcp = errmsg;          /* &errmsg */
  127.     return(TRUE);
  128.   }
  129.  
  130.   strcpy(mask,"###-##-####");           /* set mask */
  131. begin:
  132.   if(!(rv=wn_input(wn,row,col,prmpt,mask,fill,atrib,ubuff,hlpmsg))) {
  133.     *ubuff = NUL;                       /* indicate error */
  134.     return(NULL);                       /* indicate error */
  135.   }
  136.   if(wni_frmflg) return(TRUE);          /* wn_frmget in progress */
  137.   if(wns_escape) return(rv);            /* escape pressed ?? */
  138.   strcpy(mbuf,ubuff);                   /* load my buffer */
  139.   p = mbuf;                             /* set pointer */
  140.   while (*p) {                          /* set up to pluck */
  141.     if(*p == '(' || *p == ')' || *p == '-')
  142.       *p = ' ';                         /* and stash a space */
  143.     p++;                                /* bump pointer */
  144.   }                                     /* continue till done */
  145.   r = sscanf(mbuf,"%d %d %d",&s1,&s2,&s3);
  146.   if(r == EOF || r == 0) {              /* no data */
  147.     *n1 = *n2 = *n3 = 0;                /* set em all to zip */
  148.     return(rv);                         /* and return */
  149.   }
  150.   if(r != 3) {                          /* not enuf data entered */
  151.     wn_iemsg(errmsg);                   /* do error message */
  152.     goto begin;                         /* and start over */
  153.   }
  154.   *n1 = s1;                             /* 1st part */
  155.   *n2 = s2;                             /* 2nd part */
  156.   *n3 = s3;                             /* 3rd part */
  157.   return(rv);                           /* all is well.. in gross sense */
  158. }
  159.  
  160. /* End */
  161.